//只出现一次的数字II
class Solution {
public:
    int singleNumber(vector<int>& nums) 
    {
        //统计每个比特位上 0或者1 的个数 只要不是0或者3的倍数 
        //就证明 答案在此比特位上不为0 需要被记录
        int res=0;
        for(int i=0;i<32;i++)
        {
            int count=0;//统计当前比特位上的数字总和
            for(auto e:nums)
            {
                count+=(e>>i)&1;
            }
            if(count%3)
            {
                res|=(1<<i);
            }
        }
        return res;
    }
};

//两整数之和

class Solution {
public:
    int getSum(int a, int b) 
    {
        //因为 0^0 =0 1^1=0 0^1=1
        //符合二进制加法的运算结果
        //所以采用^可以计算不带进位的加法结果
        while(b!=0)
        {
            int x=a^b;//不带进位的加法结果
            unsigned int y=(unsigned int )(a&b)<<1;//-1不能左移
            a=x;
            b=y;
        }
        return a;
    }
};
//丢失的数字
class Solution {
public:
    int missingNumber(vector<int>& nums) 
    {
        int res=0;
        for(int i=0;i<=nums.size();i++)
        {
            res^=i;
            if(i<nums.size())
            {
                res^=nums[i];
            }
        }
        return res;
    }
};
//判定字符串是否唯一
class Solution {
public:
    bool isUnique(string astr) 
    {
        int hash=0;
        for(int i=0;i<astr.size();i++)
        {
            int x=astr[i]-'a';
            if( (hash>>x) &1 ==1) return false;
            hash|= (1<<x);
        }
        return true;
    }
};